package com.example.controller;

import com.example.common.RequirePermission;
import com.example.common.Result;
import com.example.dto.SystemConfigDTO;
import com.example.service.SystemConfigService;
import com.example.vo.SystemConfigVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 系统配置控制器
 */
@RestController
@RequestMapping("/api/admin/system-config")
@CrossOrigin
public class SystemConfigController {
    
    @Autowired
    private SystemConfigService systemConfigService;
    
    /**
     * 获取所有配置
     */
    @GetMapping
    @RequirePermission("admin:config:list")
    public Result<List<SystemConfigVO>> getAllConfigs() {
        return systemConfigService.getAllConfigs();
    }
    
    /**
     * 根据分组获取配置
     */
    @GetMapping("/group/{group}")
    @RequirePermission("admin:config:list")
    public Result<List<SystemConfigVO>> getConfigsByGroup(@PathVariable String group) {
        return systemConfigService.getConfigsByGroup(group);
    }
    
    /**
     * 根据ID获取配置
     */
    @GetMapping("/{id}")
    @RequirePermission("admin:config:view")
    public Result<SystemConfigVO> getConfigById(@PathVariable Long id) {
        return systemConfigService.getConfigById(id);
    }
    
    /**
     * 新增配置
     */
    @PostMapping
    @RequirePermission("admin:config:add")
    public Result<Void> addConfig(@RequestBody SystemConfigDTO configDTO) {
        return systemConfigService.addConfig(configDTO);
    }
    
    /**
     * 更新配置
     */
    @PutMapping("/{id}")
    @RequirePermission("admin:config:update")
    public Result<Void> updateConfig(@PathVariable Long id, @RequestBody SystemConfigDTO configDTO) {
        return systemConfigService.updateConfig(id, configDTO);
    }
    
    /**
     * 批量更新配置
     */
    @PutMapping("/batch")
    @RequirePermission("admin:config:update")
    public Result<Void> batchUpdateConfigs(@RequestBody Map<String, String> configs) {
        return systemConfigService.batchUpdateConfigs(configs);
    }
    
    /**
     * 删除配置
     */
    @DeleteMapping("/{id}")
    @RequirePermission("admin:config:delete")
    public Result<Void> deleteConfig(@PathVariable Long id) {
        return systemConfigService.deleteConfig(id);
    }
    
    /**
     * 获取邮箱功能配置状态（管理员专用）
     */
    @GetMapping("/email/status")
    @RequirePermission("admin:config:view")
    public Result<Map<String, Boolean>> getEmailConfigStatus() {
        Map<String, Boolean> status = Map.of(
            "emailEnabled", systemConfigService.isEmailEnabled(),
            "emailRegisterEnabled", systemConfigService.isEmailRegisterEnabled(),
            "emailLoginEnabled", systemConfigService.isEmailLoginEnabled()
        );
        return Result.success(status);
    }

    /**
     * 获取手机号功能配置状态（管理员专用）
     */
    @GetMapping("/phone/status")
    @RequirePermission("admin:config:view")
    public Result<Map<String, Boolean>> getPhoneConfigStatus() {
        Map<String, Boolean> status = Map.of(
            "phoneEnabled", systemConfigService.isPhoneEnabled(),
            "phoneRegisterEnabled", systemConfigService.isPhoneRegisterEnabled(),
            "phoneLoginEnabled", systemConfigService.isPhoneLoginEnabled()
        );
        return Result.success(status);
    }

    /**
     * 获取验证码功能配置状态（管理员专用）
     */
    @GetMapping("/captcha/status")
    @RequirePermission("admin:config:view")
    public Result<Map<String, Object>> getCaptchaConfigStatus() {
        Map<String, Object> status = Map.of(
            "captchaEnabled", systemConfigService.isCaptchaEnabled(),
            "loginCaptchaEnabled", systemConfigService.isLoginCaptchaEnabled(),
            "registerCaptchaEnabled", systemConfigService.isRegisterCaptchaEnabled(),
            "captchaType", systemConfigService.getConfigValue("captcha.type", "image"),
            "captchaExpire", systemConfigService.getIntConfig("captcha.expire", 300)
        );
        return Result.success(status);
    }
}
